package come.bjpowernode.javase.daedlock;
/*
死锁要会写：
    一般面试官要求会写，只有会写的才会在以后的开发中注意这些事情。
    因为死锁很难调试。
 */
public class DeadLock {
    public static void main(String[] args){
        Object o1 = new Object();
        Object o2 = new Object();

        //t1,t2连个线程共享o1,o2
        Thread t1 = new MyThread1(o1,o2);
        Thread t2 = new MyThread2(o1,o2);

        t1.start();
        t2.start();
        System.out.println(10);

    }
}
class MyThread1 extends Thread{
    Object o1;
    Object o2;
    public MyThread1(Object o1,Object o2){
        this.o1 = o1;
        this.o2 = o2;
    }
    public MyThread1(){

    }
    public void run(){
        synchronized(o1){
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized(o2){

            }
        }
    }
}

class MyThread2 extends Thread{
    Object o1;
    Object o2;
    public MyThread2(Object o1,Object o2){
        this.o1 = o1;
        this.o2 = o2;
    }
    public MyThread2(){

    }
    public void run(){
        synchronized(o2){
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized(o1){

            }
        }
    }
}
/*
这个程序可能没有问题，可能MyThread1在锁完o1后，
MyThread2没有抢到CUP时间片，
MyThread1直接锁o2，程序正常结束，就没有问题。
 */
